// adminAuth.js - 专门的管理后台认证中间件
const jwt = require('jsonwebtoken');
const { Audience, Anchor } = require('../models');

const adminAuth = async (req, res, next) => {
  try {
    console.log('🔐 管理后台认证检查...');
    
    // 从请求头获取token
    const authHeader = req.header('Authorization');
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      console.log('❌ 未提供有效的Authorization头');
      return res.status(401).json({
        success: false,
        message: '访问被拒绝，请提供有效的token'
      });
    }

    const token = authHeader.replace('Bearer ', '');
    
    if (!token) {
      console.log('❌ Token为空');
      return res.status(401).json({
        success: false,
        message: '访问被拒绝，请提供token'
      });
    }

    console.log('🔑 验证管理后台token...');
    
    // 验证token
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    console.log('✅ Token解码成功:', decoded);
    
    let user;
    // 根据用户类型查找用户
    if (decoded.userType === 'audience') {
      user = await Audience.findByPk(decoded.userId);
    } else if (decoded.userType === 'anchor') {
      user = await Anchor.findByPk(decoded.userId);
    } else {
      return res.status(401).json({
        success: false,
        message: '无效的用户类型'
      });
    }

    if (!user) {
      return res.status(401).json({
        success: false,
        message: '用户不存在'
      });
    }

    // 将用户信息添加到请求对象
    req.user = {
      userId: decoded.userId,
      userType: decoded.userType
    };

    console.log('✅ 管理后台认证成功，用户ID:', decoded.userId, '类型:', decoded.userType);
    next();
  } catch (error) {
    console.error('❌ 管理后台Token验证错误:', error);
    
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({
        success: false,
        message: '无效的token'
      });
    }
    
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({
        success: false,
        message: 'token已过期，请重新登录'
      });
    }

    res.status(500).json({
      success: false,
      message: '服务器错误'
    });
  }
};

module.exports = adminAuth;